#include "comm.hpp"
#include <wait.h>
void RDMessage(int fd)
{
    char message[SIZE];
    memset(message, '\0', sizeof(message));
    while (true)
    {
        ssize_t s = read(fd, message, sizeof(message));
        if (s > 0)
        {
            std::cout << "[" << getpid() << "]client say:" << message << endl;
        }
        else if (s == 0) // 读到最后一个
        {
            cout << "Read the last one client quit server quit too" << endl;
            break;
        }
        else
        {
            perror("read");
            exit(3);
        }
    }
}
int main()
{
    // 创建命名管道
    if (mkfifo(ipcPath.c_str(), MODE) == -1)
    {
        perror("mkfifo");
        exit(1);
    }
    Log("创建命名管道成功", Debug) << "step1" << endl;
    // 进行正常的文件操作
    // 打开文件
    int fd = open(ipcPath.c_str(), O_RDONLY); // 以只读方式打开
    if (fd == -1)
    {
        perror("open");
        exit(2);
    }
    Log("打开文件成功", Debug) << "step2" << endl;
    // 进行通信操作，读信息
    for (int i = 0; i < 3; i++)
    {
        pid_t id = fork();
        if (id == 0)
        {
            RDMessage(fd);
            exit(3);
        }
    }
    for (int i = 0; i < 3; i++)
    {
        int ret = waitpid(-1, nullptr, 0);
        if (ret == -1)
        {
            perror("wait");
        }
    }

    // 关闭文件
    if (close(fd) == -1)
    {
        perror("close");
        exit(4);
    }
    Log("关闭文件成功", Debug) << "step3" << endl;
    // 删除管道
    unlink(ipcPath.c_str());
    Log("删除管道文件成功", Debug) << "step4" << endl;
    return 0;
}